const path = require("path");
const fs = require("fs");

// 规范化URL函数
function fn规范化网址(网址) {
  if (!网址) return 网址;
  // 去除末尾的斜杠（但保留协议部分的双斜杠）
  return 网址.replace(/\/$/, '');
}

// 确保跨域失败记录文件存在
const _跨域失败日志路径 = path.join(__dirname, "../", "配置", "跨域失败记录.log");
function fn确保跨域失败日志文件存在() {
  try {
    // 检查文件是否存在
    fs.accessSync(_跨域失败日志路径, fs.constants.F_OK);
  } catch (error) {
    // 文件不存在，创建空文件
    fs.writeFileSync(_跨域失败日志路径, "", "utf8");
    console.log(`📝 创建跨域失败记录文件: ${_跨域失败日志路径}`);
  }
}
fn确保跨域失败日志文件存在();

// 写入跨域失败记录
function fn写入跨域失败记录(访问IP, 请求URL, origin) {
  try {
    // 转换为北京时间，不受设备时区影响
    const _现在时间 = new Date();
    const _北京时间 = new Date(_现在时间.getTime() + 8 * 60 * 60 * 1000);
    const _当前时间 = _北京时间.toISOString().replace('T', ' ').substring(0, 19);
    
    const _日志内容 = `[${_当前时间}] IP ${访问IP}  Origin ${origin}  URL ${请求URL}\n`;

    // 追加写入日志文件
    fs.appendFileSync(_跨域失败日志路径, _日志内容, "utf8");
    console.log(`📝 跨域失败记录已保存`);
  } catch (error) {
    console.error("❌ 写入跨域失败记录时出错:", error.message);
  }
}

module.exports = function fn跨域配置() {
  // 获取环境变量 CORS，默认为 0
  let _cors设置 = process.env.CORS ? parseInt(process.env.CORS, 10) : 0;
  console.log(`🔍 读取环境变量 CORS: ${_cors设置}`);

  // 根据 CORS 值处理不同情况
  if (_cors设置 === -1) {
    console.log("🚫 CORS 设置为 -1，不允许跨域请求");
    return {
      跨域策略: "禁用",
      跨域列表: []
    };
  } else if (_cors设置 === 1) {
    console.log("🔓 CORS 设置为 1，允许所有跨域请求");
    return {
      跨域策略: "全部允许",
      跨域列表: []
    };
  } else if (_cors设置 === 0) {
    console.log("📋 CORS 设置为(默认值) 0，使用跨域列表文件");
    try {
      const _列表路径 = path.join(__dirname, "../", "配置", "跨域列表.txt");
      console.log(`📂 尝试读取跨域列表文件: ${_列表路径}`);

      // 读取文件内容
      const _文件内容 = fs.readFileSync(_列表路径, "utf8");
      console.log("📄 文件读取成功");

      // 按行分割并处理
      let _域名列表 = _文件内容
        .split("\n") // 按行分割
        .map((line) => line.trim()) // 去除每行前后空格
        .filter((line) => line.length > 0) // 过滤空行
        .filter((line) => !line.startsWith("//")) // 过滤注释行
        .map((line) => line.replace(/\/\*.*\*\//g, "").trim()) // 移除行内注释
        .filter((line) => line.length > 0); // 再次过滤处理后可能为空的行

      // 对列表中的网址进行规范化处理
      _域名列表 = _域名列表.map(网址 => fn规范化网址(网址));

      console.log(`✅ 成功解析跨域列表，共 ${_域名列表.length} 个域名`);
      console.log(`🌐 允许的域名: ${_域名列表.join(", ")}`);

      return {
        跨域策略: "白名单",
        跨域列表: _域名列表,
        记录失败访问: fn写入跨域失败记录
      };
    } catch (error) {
      console.error("❌ 读取或解析跨域列表文件失败:", error.message);
      console.log("🛡️  因文件读取失败，不允许跨域请求");
      return {
        跨域策略: "禁用",
        跨域列表: []
      };
    }
  } else {
    console.warn(`⚠️  无效的 CORS 设置: ${_cors设置}，默认不允许跨域`);
    return {
      跨域策略: "禁用",
      跨域列表: []
    };
  }
};